import PyInstaller.__main__
import os
import shutil

def build_executable():
    # 清理之前的构建
    if os.path.exists('build'):
        shutil.rmtree('build')
    if os.path.exists('dist'):
        shutil.rmtree('dist')
    
    # PyInstaller参数
    args = [
        'main.py',                    # 主程序入口
        '--name=spam_filter_api',     # 可执行文件名
        '--onedir',                   # 生成目录模式
        '--windowed',                 # 无控制台窗口
        '--add-data=app:app',         # 添加app目录
        '--hidden-import=uvicorn',    # 添加隐式导入
        '--hidden-import=fastapi',
        '--hidden-import=pydantic',
        '--hidden-import=torch',
        '--hidden-import=transformers',
        # 排除数据目录
        '--exclude-module=data',
        '--exclude-module=models',
    ]
    
    # 运行PyInstaller
    PyInstaller.__main__.run(args)
    
    # 创建必要的空目录
    dist_dir = 'dist/spam_filter_api'
    for dir_name in ['data', 'models', 'logs']:
        dir_path = os.path.join(dist_dir, dir_name)
        os.makedirs(dir_path, exist_ok=True)
        # 创建.gitkeep文件保持目录结构
        with open(os.path.join(dir_path, '.gitkeep'), 'w') as f:
            pass
    
    # 创建说明文件
    readme_content = """# 使用说明

此目录结构说明：
- data/: 存放数据集文件（使用前请添加数据集）
- models/: 存放训练好的模型文件（使用前请添加模型）
- logs/: 存放日志文件

注意：首次使用前，请确保：
1. 将训练好的模型文件放入 models/ 目录
2. 将数据集文件放入 data/ 目录
"""
    with open(os.path.join(dist_dir, 'README.md'), 'w', encoding='utf-8') as f:
        f.write(readme_content)
    
    print("""
构建完成！可执行文件在 dist/spam_filter_api/ 目录下

使用前请确保：
1. 将训练好的模型文件放入 models/ 目录
2. 将数据集文件放入 data/ 目录
""")

if __name__ == '__main__':
    build_executable() 